package br.com.werp.regras.pessoa.integracao;

import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.pessoa.DocumentoPessoaVO;
import br.com.werp.regras.geral.vos.tabelas.Documento;
import br.com.werp.regras.geral.vos.tabelas.Documento_pessoal;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import java.util.List;
import java.util.ResourceBundle;


/**
 * @author Candido
 * Criado em  23/05/2005
 */
public class DocumentoPessoaDAO extends MasterDAO {
    private static final String APAGAR_DOCUMENTO = "APAGAR_DOCUMENTO";
    private static final String APAGAR_DOCUMENTO_PESSOAL = "APAGAR_DOCUMENTO_PESSOAL";
    private static DocumentoPessoaDAO documentoPessoaDAO;

    /**
     * @param string
     */
    private DocumentoPessoaDAO(String banco) throws Exception {
        super(banco);
    }

    public static DocumentoPessoaDAO getDocumentoPessoaDAO()
        throws Exception {
        if (documentoPessoaDAO == null) {
            ResourceBundle bundle = ResourceBundle.getBundle(Constantes.CONFIG);
            documentoPessoaDAO = new DocumentoPessoaDAO(bundle.getString(
                        Constantes.BANCO));
        }

        return documentoPessoaDAO;
    }

    /**
     * @param key
     * @param documento
     * @throws Exception
     */
    public void inserirDocumento(Object key, Documento documento)
        throws Exception {
        Connection connection = validarTransacao(key);

        inserirVO(connection, documento);
    }

    /**
     * @param key
     * @param documento_pessoal
     * @throws Exception
     */
    public void inserirDocumentoPessoal(Object key,
        Documento_pessoal documento_pessoal) throws Exception {
        Connection con = validarTransacao(key);

        inserirVO(con, documento_pessoal);
    }

    public void alterarDocumento(Object key, Documento documento)
        throws Exception {
        Connection connection = validarTransacao(key);
        String[] pks = { "docm_id" };
        atualizarVO(connection, documento, pks);
    }

    public void alterarDocumentoPessoal(Object key,
        Documento_pessoal documento_pessoal) throws Exception {
        Connection connection = validarTransacao(key);
        atualizarVO(connection, documento_pessoal,
            new String[] { "dcpe_documento" });
    }

    /**
     * @param pessId
     * @return
     * @throws Exception
     */
    public List obterDocumentos(String pessId) throws Exception {
        Connection connection = getConexao();

        return obterDocumentos(connection, Util.zeroOuInt(pessId));
    }

    public List obterDocumentos(Object key, int pess_id)
        throws ErroPadrao, Exception {
        Connection connection = (Connection) key;

        DocumentoPessoaVO documentoPessoaVO = new DocumentoPessoaVO();
        documentoPessoaVO.setDcpe_pessoa(pess_id);

        try {
            return pesquisarVO(connection, documentoPessoaVO, "",
                "documento_pessoal", documentoPessoaVO.EXCLUIDAS);
        } finally {
            liberaConeccao(connection);
        }
    }

    public void apagarDocumentoPessoal(Object key,
        DocumentoPessoaVO documentoPessoaVO) throws Exception {
        Connection connection = validarTransacao(key);
        excluirVO(connection, documentoPessoaVO);
    }

    public void excluirDocumentoPessoal(Documento_pessoal documento_pessoal,
        Object key) throws Exception {
        Connection connection = validarTransacao(key);
        excluirVO(connection, documento_pessoal);
    }

    public void inserirDocumentoPessoalVOTabela(
        Documento_pessoal documento_pessoal, Object key)
        throws Exception {
        Connection connection = validarTransacao(key);
        inserirVOGenericoSemIdentity(connection, documento_pessoal);
    }
}
